<?php
/*
	Aurus CMS - free OOP CMS
	Copyright (C) 2010  Nestor Yanchuk

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 2 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('ROOT')) die();
/**
 * Клас для роботи з мовними файлами
 * 
 * @package Aurus
 * @author Kvis
 * @copyright 2010
 * @version 1.0
 * @access public
 */
class Lang {
	/**
	 * Асоціативний масив фраз та їх перекладів
	 * array(
	 * 	'Фраза 1'	=>	'Phraze 1',
	 * 	'Фраза 2'	=>	'Phraze 2'
	 * )
	 *
	 * @var array
	 */
	public static $langArray = array();

	/**
	 * Функція ініціації класу
	 *
	 */
	public static function init() {
		$lang = Config::get('language');
		
 		if (Cache::exists('lang_data_'.md5($lang))) {
 			self::$langArray = Cache::get('lang_data_'.md5($lang));
 		} else {
 			self::readLngDir();
 			Cache::set('lang_data_'.md5($lang),self::$langArray);
 		}
	}
	
	static function readLngDir() {
		$lang = Config::get('language');
		
		$lngs = read_directory(ROOT . '/language/' . $lang, 0, 1, 'lng');
		setlocale(LC_ALL, $lang);
		if (count($lngs)) {
			foreach ($lngs as $file) {
				self::parseLng(ROOT . '/language/' . $lang . '/' . $file);
			}
		}
	}
	
	/**
	 * Переклад фрази заданою в настройках мовою, якщо фраза відсутня в мовному файлі, то повертається оригінальна фраза
	 *
	 * @param string $phrase
	 * @return string
	 */
	public static function _($phrase) {
		$ret = isset(self::$langArray[$phrase]) ? self::$langArray[$phrase] : $phrase;
		return Filter::apply($ret,'language');
	}

	/**
	 * Функція повертає назви всіх днів тижня, місяців, та їх абревіатур певною мовою
	 *
	 * @return array
	 */
	public static function gettimelng() {
		return array('Sunday' => self::_('Неділя'), 'Monday' => self::_('Понеділок'), 'Tuesday' => self::_('Вівторок'),
			'Wednesday' => self::_('Середа'), 'Thursday' => self::_('Четвер'), 'Friday' => self::_('П\'ятниця'), 'Saturday' =>
			self::_('Субота'), 'Sun' => self::_('Нд'), 'Mon' => self::_('Пн'), 'Tue' => self::_('Вт'), 'Wed' => self::_('Ср'),
			'Thu' => self::_('Чт'), 'Fri' => self::_('Пт'), 'Sat' => self::_('Сб'), 'January' => self::_('січня'), 'February' =>
			self::_('лютого'), 'March' => self::_('березня'), 'April' => self::_('квітня'), 'May' => self::_('травня'), 'June' =>
			self::_('червня'), 'July' => self::_('липня'), 'August' => self::_('серпня'), 'September' => self::_('вересня'),
			'October' => self::_('жовтня'), 'November' => self::_('листопада'), 'December' => self::_('грудня'), 'Jan' => self::
			_('січ'), 'Feb' => self::_('лют'), 'Mar' => self::_('бер'), 'Apr' => self::_('кві'), 'Jun' => self::_('чер'), 'Jul' =>
			self::_('лип'), 'Aug' => self::_('сер'), 'Sep' => self::_('вер'), 'Oct' => self::_('жов'), 'Nov' => self::_('лис'),
			'Dec' => self::_('гру'));
	}

	/**
	 * @ignore 
	 */
	private static function parseLng($file) {
		$f = file($file);
		$key = '';
		foreach ($f as $line) {
			if (empty($line)) {
				continue;
			}
			$line = trim($line);
			if (substr($line, 0, 5) == 'msgid') {
				$key = substr($line, 7, -1);
			} elseif (substr($line, 0, 6) == 'msgstr') {
				self::$langArray[$key] = substr($line, 8, -1);
			}
		}
	}
}

/**
 * Переклад фрази заданою в настройках мовою, якщо фраза відсутня в мовному файлі, то повертається оригінальна фраза
 *
 * @param string $phrase
 * @return string
 */
function __($phrase) {
	return Lang::_($phrase);
}